import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class HBaseStu {
    //表是否存在的方法，如果存在则返回true,否则返回false
    public static boolean table_exist(Configuration config,
                                      String tablename) throws Exception {
        //管理者管理表
        HBaseAdmin hBaseAdmin = new HBaseAdmin(config);
        //表是否存在 hBaseAdmin.tableExists(tablename)=true
        if (hBaseAdmin.tableExists(tablename)) {
            System.out.println("表存在");
            return true;
            //表不存在
        } else {
            System.out.println("表不存在");
            return false;
        }
    }

    //hbase shell -->create ‘表名’，'列族'
    public static void CreateTable(
            Configuration conf,    // conf对象
            String tablename, //表名
            String[] cf //列族 创建表的时候有可能是多个列族，所以用了字符串数组
    ) throws Exception { //自动返回对象的快捷键.var   管理者对象
        //admin管理者对象
        HBaseAdmin admin = new HBaseAdmin(conf);
        //生成一个表的描述器 表名作为参数
        HTableDescriptor hTableDescriptor
                = new HTableDescriptor(TableName.valueOf(tablename));
        //由于列族有多个，循环 取出每一个列族
        for (String c : cf) {
            //生成列族描述器
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(c);
            //将列族信息添加到表中
            hTableDescriptor.addFamily(hColumnDescriptor);
        }
        //创建表
        admin.createTable(hTableDescriptor);
        System.out.println("");
    }

    //log4j重新编译快捷键 alt+shift+ctrl+s--modules-->src-->右键source
    public static void main(String[] args) throws Exception {
        //配置对象
        Configuration conf = HBaseConfiguration.create();
        //配置对象  ip地址是hadoop的IP地址
        conf.set("hbase.zookeeper.quorum", "192.168.126.139");
        //配置端口
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        System.out.println("***判断表是否存在*****");
        //boolean flag = table_exist(conf, "student");
        System.out.println("***判断表是否存在*****");

        System.out.println("********创建表操作***********");
        //列族数组
        String cf[] = {"person", "class"};
        //静态方法的调用
        CreateTable(conf, "test", cf);
        System.out.println("*********创建表操作************");


    }
}
